//
// Created by martin on 4/28/22.
//

#ifndef MUDUO_CONFIGURER_H
#define MUDUO_CONFIGURER_H

#include "muduo/base/noncopyable.h"

#include <string>
#include <vector>

namespace ftp
{

/**
 * 读取配置文件类
 * @details 在线程池运行前装载文件完毕, 无需考虑线程安全
 */
class Configurer : muduo::noncopyable
{
public:
    static Configurer& instance()
    {
        static Configurer config;
        return config;
    }
    bool load(const std::string& filepath);
    std::string getItemString(const std::string& itemname, const std::string& defaultString = "");
    int getItemInt(const std::string& itemname, int defaultValue = 0);

    // 必须在load()后调用
    // 检查FTP根目录，确保目录存在，以及具有读写权限
    void checkRootPath();

private:
    Configurer() : loaded_(false) 
    {}
    ~Configurer() = default;

    struct Item
    {
        std::string name_;
        std::string value_;
    };

    bool loaded_;
    std::vector<Item*> items_;

    static const int kMaxNumPerLine = 500;
};

static const std::string kDefaultConfigFilePath = "config.ini";
static const std::string kDefaultFtpRootPath = "/home/ftproot";

} // namespace ftp


#endif //MUDUO_CONFIGURER_H
